/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import accesoDatos.Consultas;
import com.sgd.videoclub.Socio;
import com.sgd.videoclub.Videoclub;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import utils.FacesUtils;
import utils.FuncionesGenericas;
import utils.GeneraReporte;

/**
 *
 * @author Ing Daniel Silva
 */
@ManagedBean
@RequestScoped
public class CtrSocio {

    //Objetos y Listas:
    Socio socio = new Socio();
    List<Socio> lstSocios = new ArrayList<>();
    List<Socio> lstSociosMenu = new ArrayList<>();

    //Variables Utilizadas:
    String txtBuscar = "";
    String opcionEdicion = "";
    String opcionBoton = "";

    //Librerias Herramientas
    Consultas consultas = new Consultas();
    FuncionesGenericas fg = new FuncionesGenericas();
    GeneraReporte gr = new GeneraReporte();

    //Sesiòn
    CtrSession ctrSession;

    //Constructor
    public CtrSocio() {
        //Cargo Sesiòn
        ctrSession = (CtrSession) FacesUtils.getManagedBean("ctrSession");

        //Refresco los datos de la ventana
        cargarDatos();

        //Carga Socio en caso que se edite
        cargarSocio();
    }

    public void cargarDatos() {
        //Inicializo valores:
        lstSocios = consultas.getListHql(null, "Socio", " 0=0 order by codigo DESC ", null);

        //cargoSociosMenu();

    }

//    public void cargoSociosMenu() {
//
//    //Lista de Socios que Aparecen en el Menu:
//        List<ParametrosConsulta> lisPar = new ArrayList();
//        lisPar.add(new ParametrosConsulta("usuarioId", ctrSession.getUsuarioLogueado().getId()));
//
//        String sql = " SELECT DISTINCT emp.* "
//                + "    FROM USUARIO us,EMPRESA emp,PROYECTO proy,REQ_PARTICIPACION req "
//                + "    where "
//                + "    req.PROYECTO_ID=proy.ID and proy.EMPRESA_ID=emp.id and emp.USUARIO_ID=us.ID "
//                + "    and req.DESTINATARIO_ID=:usuarioId "
//                + "    and req.ESTADO='ACEPTADO' "
//                + "    and req.INMENU=1 "
//                + "    order by emp.abreviatura "
//                + " ";
//
//        lstSociosMenu = consultas.getListSqlClass(sql, Socio.class, lisPar);
//
//        //Saco los proyectos de cada socio:
//        for (int n=0;n<lstSociosMenu.size();n++) {
//
//            List<ParametrosConsulta> lisParProy = new ArrayList<ParametrosConsulta>();
//            lisParProy.add(new ParametrosConsulta("usuarioId", ctrSession.getUsuarioLogueado().getId()));
//            lisParProy.add(new ParametrosConsulta("socioId", lstSociosMenu.get(n).getId()));
//
//            sql = "  SELECT proy.* FROM USUARIO us,EMPRESA emp,PROYECTO proy,REQ_PARTICIPACION req "
//                    + "where "
//                    + "    req.PROYECTO_ID=proy.ID and proy.EMPRESA_ID=emp.id and emp.USUARIO_ID=us.ID "
//                    + "    and req.DESTINATARIO_ID=:usuarioId "
//                    + "    and req.ESTADO='ACEPTADO' "
//                    + "    and req.INMENU=1 "
//                    + "    and emp.id=:socioId "
//                    + "    order by proy.abreviatura ";
//            List<Proyecto> listProyectosMenu = consultas.getListSqlClass(sql, Proyecto.class, lisParProy);
//            lstSociosMenu.get(n).setProyectosMenu(listProyectosMenu);
//            
//        }
//
//    }

    public void cargarSocio() {
        //Cargo la Socio:
        
        socio.setSel_VideoClub(ctrSession.selVideoCLub.getCodigo());

        if (!ctrSession.getParametro().isEmpty()) {

            for (Object parametro : ctrSession.getParametro()) {
                parametro.getClass();
                if (parametro.getClass() == socio.getClass()) {
                    opcionEdicion = "Editar";
                    socio = (Socio) parametro;
                    socio.setSel_VideoClub(socio.getVideoclub().getCodigo());
                }
            }

        } else {
            opcionEdicion = "Nuevo";
        }
    }

    //Opciones del Menu del Mantenimiento:
    public void seleccionaOpcion(String opcion) throws IOException {

        String url;
        boolean encontro = false;
        switch (opcion) {
            //Crear un Nuevo Registro
            case "N":
                ctrSession.getParametro().clear();
                fg.redireccionar("frmSocio");
                break;
            //Editar el registro seleccionado
            case "E":

                //Cargo Entidad
                encontro = false;
                for (Socio socio : lstSocios) {
                    if (socio.isSeleccionado()) {
                        this.socio = socio;
                        encontro = true;
                        break;
                    }
                }

                if (encontro) {
                    //Guardo valor en la Session
                    ctrSession.getParametro().add(socio);
                    //Cargo Valores de la Entidad:
                    fg.redireccionar("frmSocio");
                }

                break;
            //Borrar el Registro seleccionado
            case "B":

                //Encuentro Entidad Seleccionada
                encontro = false;
                for (Socio socio : lstSocios) {
                    if (socio.isSeleccionado()) {
                        this.socio = socio;
                        encontro = true;
                        break;
                    }
                }

                //Realizo la Eliminacion:
                consultas.eliminar(socio);
                cargarDatos();
                break;
        }

    }

    //Mètodo de Registro de Entidad
    public String grabar() {
        int opcion = 1;
        if (socio.getCodigo()!= 0) {
            opcion = 0;
        }else{
        socio.setCodigo(Integer.valueOf(consultas.nextSecuencia("VIDEOCLUB.SEQ_SOCIO.nextval").toString()));
        
        }

        //Realizo la Validaciòn de la Entidad
        if (validacion(socio)) {

            //Cargo los valores de la entidad:
//            socio.setUsuario(ctrSession.getUsuarioLogueado());
            socio.setVideoclub(ctrSession.getSelVideoCLub());
            
            //Realizo el guardado:
            consultas.guardar(socio, opcion);
            fg.redireccionar("listSocios");
        }
        return "";
    }

    //Metodo que realiza la validaciòn de la Entidad:
    public boolean validacion(Socio socio) {
        boolean exito = true;
        //Valido que los dos password sean los mismos

        if(socio.getEdad()==0){
        exito = false;
            fg.mostrarError("La edad de un socio no puede ser cero.");
        }
        
        return exito;
    }

    //Metodo que realiza la busqueda de Objetos:
    public String buscar() {

        if (!txtBuscar.equals("")) {
            //Defino los campos por los que se realizarà la bùsqueda:
            String where = " upper(usuario.username) like '%" + txtBuscar.toUpperCase() + "%' or"
                    + " upper(nombre) like '%" + txtBuscar.toUpperCase() + "%' or"
                    + " upper(apellido) like '%" + txtBuscar.toUpperCase() + "%' ";
            lstSocios = consultas.getListHql(null, "Socio", " 0=0 order by codigo DESC ", null);
        } else {
            listarSocios();
        }
        return "";

    }

    //Listado de Socios
    public void listarSocios() {
        lstSocios = consultas.getListHql(null, "Socio",null, null);
    }

    //Metodo que Redirecciona a la Pagina de Listados:
    public String irListado() {
        fg.redireccionar("listSocios");
        return "";
    }

    //Metodo de Refrescamiento de Pagina:
    public String refrescar() {
        return "";
    }

    //Metodo que Realiza la Impresion de Listados
    public void imprimir() {
        gr.generaPdfListado(lstSocios, "socios", Socio.class, new HashMap(), "listasocios");
    }

    //POJOS UTILIZADOS:
    public Socio getSocio() {
        return socio;
    }

    public void setSocio(Socio socio) {
        this.socio = socio;
    }

    public List<Socio> getLstSocios() {
        return lstSocios;
    }

    public void setLstSocios(List<Socio> lstSocios) {
        this.lstSocios = lstSocios;
    }

    public List<Socio> getLstSociosMenu() {
        return lstSociosMenu;
    }

    public void setLstSociosMenu(List<Socio> lstSociosMenu) {
        this.lstSociosMenu = lstSociosMenu;
    }

    public String getTxtBuscar() {
        return txtBuscar;
    }

    public void setTxtBuscar(String txtBuscar) {
        this.txtBuscar = txtBuscar;
    }

    public String getOpcionEdicion() {
        return opcionEdicion;
    }

    public void setOpcionEdicion(String opcionEdicion) {
        this.opcionEdicion = opcionEdicion;
    }

    public String getOpcionBoton() {

        if (opcionEdicion.startsWith("Nue")) {
            opcionBoton = "Crear";
        }
        if (opcionEdicion.startsWith("Edi")) {
            opcionBoton = "Actualizar";
        }

        return opcionBoton;
    }

    public void setOpcionBoton(String opcionBoton) {
        this.opcionBoton = opcionBoton;
    }
    
    
    
    

}
